// 项目入口文件

import Vue from 'vue'
import app from './APP.vue'

// 导入 路由
import VueRouter from 'vue-router'
Vue.use(VueRouter);
// 导入自己的router.js 模块
import router from './router.js'

// 导入reource
import VueResource from 'vue-resource'
Vue.use(VueResource);


// 引入 monentjs处理时间
import moment from 'moment'
// 全局定义一个过滤器时间格式
Vue.filter('dateFormat',function(dataStr,pattern="YYYY-MM-DD HH-mm-ss"){
    return moment(dataStr).format(pattern);
});

// 导入 mui css
import './libs/mui/css/mui.css'


//按需导入 组件

// 1 - header组件
import { Header,Swipe, SwipeItem,Button } from 'mint-ui';
Vue.component(Header.name, Header);
// 2 - 轮播
Vue.component(Swipe.name, Swipe);
Vue.component(SwipeItem.name, SwipeItem);
// 3 -按钮
Vue.component(Button.name, Button);


// 引入vuex 
import Vuex from 'vuex'
Vue.use(Vuex);
const store = new Vuex.Store({
    state: { // this.$store.state
        //  这里相当于是 data
        car: [] // 将购物车商品的数据用一个数组存起来，“商品数量 价格等” 存储一些商品对象， {id: '商品id',count: '购买数量',price: '单价',selected: '是否被选中'}
    },
    mutations: { // this.$store.commit('方法名'，唯一参数)
        addToCar(state,goodsInfo){
            // 点击购物车 把商品信息 保存到state的car中
            // 1 - 如果已经有商品  只变化数量即可；
            // 2 - 没有商品 那么需要添加商品数据 push -> car

            // 假设 没找到该种商品
            var flag = false;
            state.car.some(item => {
                if(item.id == goodsInfo.id){
                    item.count += parseInt(goodsInfo.count);
                    flag = true;
                    return true;
                }
            })
            // 最终循环完毕 还是得到得false;那么就直接添加数据到car中
            if (!flag) {
                state.car.push(goodsInfo);
            }
        }
    },
    getters: { // this.$store.getters
        // 相当于计算属性和filters  只要是car修改了  就重新设置这里边的值
        getAllCount(state){
            var c = 0;
            state.car.forEach(item => {
                c += item.count;
            })
            return c;
        }
    }
});

var vm = new Vue({
    el: '#app',
    render: c => c(app),
    router,
    store,// 挂载在 实例上
});